//编写一个算法来判断一个数 n 是不是快乐数。 
//
// 「快乐数」定义为：对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和，然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
//如果 可以变为 1，那么这个数就是快乐数。 
//
// 如果 n 是快乐数就返回 True ；不是，则返回 False 。 
//
// 
//
// 示例： 
//
// 输入：19
//输出：true
//解释：
//12 + 92 = 82
//82 + 22 = 68
//62 + 82 = 100
//12 + 02 + 02 = 1
// 
// Related Topics 哈希表 数学 
// 👍 418 👎 0

package leetcode.editor.cn;

import common.util.MyUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * Java：快乐数
 *
 * @author changgui
 */
@SuppressWarnings("all")
public class P202_HappyNumber {
    public static void main(String[] args) {
        Solution solution = new P202_HappyNumber().new Solution();
        MyUtil.print(solution.isHappy(116));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        Map<Integer, Boolean> map = new HashMap<>();

        public boolean isHappy(int n) {
            int sum = 0;
            for (char c : String.valueOf(n).toCharArray()) {
                sum += (c - '0') * (c - '0');
            }
            if(map.get(sum) != null) {
                return false;
            }
            if (sum == 1) {
                return true;
            }
            map.put(sum, false);
            return isHappy(sum);
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)

}
